vulkan: Drop GskVulkanPipelineLayout
authorMatthias Clasen <mclasen@redhat.com>
Fri, 22 Sep 2017 17:30:26 +0000 (13:30 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sat, 23 Sep 2017 02:16:09 +0000 (22:16 -0400)
We already move the descriptor set layout out of it,
so we can just as well keep the pipeline layouts in
the render object as well, and get rid of this extra
object. Update all callers.

23 files changed:
gsk/gskvulkanblendpipeline.c
gsk/gskvulkanblendpipelineprivate.h
gsk/gskvulkanblurpipeline.c
gsk/gskvulkanblurpipelineprivate.h
gsk/gskvulkanborderpipeline.c
gsk/gskvulkanborderpipelineprivate.h
gsk/gskvulkanboxshadowpipeline.c
gsk/gskvulkanboxshadowpipelineprivate.h
gsk/gskvulkancolorpipeline.c
gsk/gskvulkancolorpipelineprivate.h
gsk/gskvulkancolortextpipeline.c
gsk/gskvulkancolortextpipelineprivate.h
gsk/gskvulkaneffectpipeline.c
gsk/gskvulkaneffectpipelineprivate.h
gsk/gskvulkanlineargradientpipeline.c
gsk/gskvulkanlineargradientpipelineprivate.h
gsk/gskvulkanpipeline.c
gsk/gskvulkanpipelineprivate.h
gsk/gskvulkanrender.c
gsk/gskvulkanrenderpass.c
gsk/gskvulkanrenderpassprivate.h
gsk/gskvulkantextpipeline.c
gsk/gskvulkantextpipelineprivate.h

index 8a98fbcf83878640a402dd945adf5a09cf37ea29..6d939ca296f98a299c0d90f3e8ca6486ed042c2c 100644 (file)
@@ -76,11 +76,12 @@ gsk_vulkan_blend_pipeline_init (GskVulkanBlendPipeline *self)
 }
 
 GskVulkanPipeline *
-gsk_vulkan_blend_pipeline_new (GskVulkanPipelineLayout *layout,
+gsk_vulkan_blend_pipeline_new (GdkVulkanContext        *context,
+                               VkPipelineLayout         layout,
                                const char              *shader_name,
                                VkRenderPass             render_pass)
 {
-  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_BLEND_PIPELINE, layout, shader_name, render_pass);
+  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_BLEND_PIPELINE, context, layout, shader_name, render_pass);
 }
 
 gsize
index 2d8bed5deb280ebdeeef08bce1227d955411d31d..eb471981b8929207a233c2b07146a17e6cf71e85 100644 (file)
@@ -13,7 +13,8 @@ typedef struct _GskVulkanBlendPipelineLayout GskVulkanBlendPipelineLayout;
 
 G_DECLARE_FINAL_TYPE (GskVulkanBlendPipeline, gsk_vulkan_blend_pipeline, GSK, VULKAN_BLEND_PIPELINE, GskVulkanPipeline)
 
-GskVulkanPipeline *     gsk_vulkan_blend_pipeline_new                   (GskVulkanPipelineLayout *       layout,
+GskVulkanPipeline *     gsk_vulkan_blend_pipeline_new                   (GdkVulkanContext               *context,
+                                                                         VkPipelineLayout                layout,
                                                                          const char                     *shader_name,
                                                                          VkRenderPass                    render_pass);
 
index 779bf81ec0496decce36d4aa6ce937239e2fc128..6e9bff19a3b9efadfa095b0b9c11a6c7526a7bb6 100644 (file)
@@ -83,11 +83,12 @@ gsk_vulkan_blur_pipeline_init (GskVulkanBlurPipeline *self)
 }
 
 GskVulkanPipeline *
-gsk_vulkan_blur_pipeline_new (GskVulkanPipelineLayout *layout,
+gsk_vulkan_blur_pipeline_new (GdkVulkanContext        *context,
+                              VkPipelineLayout         layout,
                               const char              *shader_name,
                               VkRenderPass             render_pass)
 {
-  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_BLUR_PIPELINE, layout, shader_name, render_pass);
+  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_BLUR_PIPELINE, context, layout, shader_name, render_pass);
 }
 
 gsize
index 44b139d4bf2625c6de61feede4b7115f3f4d9f09..2fc42736682c7430d39375430b750c0cb88d0981 100644 (file)
@@ -13,7 +13,8 @@ typedef struct _GskVulkanBlurPipelineLayout GskVulkanBlurPipelineLayout;
 
 G_DECLARE_FINAL_TYPE (GskVulkanBlurPipeline, gsk_vulkan_blur_pipeline, GSK, VULKAN_BLUR_PIPELINE, GskVulkanPipeline)
 
-GskVulkanPipeline *     gsk_vulkan_blur_pipeline_new                   (GskVulkanPipelineLayout *layout,
+GskVulkanPipeline *     gsk_vulkan_blur_pipeline_new                   (GdkVulkanContext        *context,
+                                                                        VkPipelineLayout         layout,
                                                                         const char              *shader_name,
                                                                         VkRenderPass             render_pass);
 
index ab6509b7853b008dc3c423e8be00a4c4f5595694..a0da43962b8e1309a383de2b1da6a7d45c606780 100644 (file)
@@ -115,11 +115,12 @@ gsk_vulkan_border_pipeline_init (GskVulkanBorderPipeline *self)
 }
 
 GskVulkanPipeline *
-gsk_vulkan_border_pipeline_new (GskVulkanPipelineLayout *layout,
-                               const char              *shader_name,
-                               VkRenderPass             render_pass)
+gsk_vulkan_border_pipeline_new (GdkVulkanContext        *context,
+                                VkPipelineLayout         layout,
+                                const char              *shader_name,
+                                VkRenderPass             render_pass)
 {
-  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_BORDER_PIPELINE, layout, shader_name, render_pass);
+  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_BORDER_PIPELINE, context, layout, shader_name, render_pass);
 }
 
 gsize
index de6d1768a79297b87ce72ec233b1dc853606400f..d82679259d9f850d38d79558f97d0e76acdec3ad 100644 (file)
@@ -14,7 +14,8 @@ typedef struct _GskVulkanBorderPipelineLayout GskVulkanBorderPipelineLayout;
 
 G_DECLARE_FINAL_TYPE (GskVulkanBorderPipeline, gsk_vulkan_border_pipeline, GSK, VULKAN_BORDER_PIPELINE, GskVulkanPipeline)
 
-GskVulkanPipeline *     gsk_vulkan_border_pipeline_new                  (GskVulkanPipelineLayout *       layout,
+GskVulkanPipeline *     gsk_vulkan_border_pipeline_new                  (GdkVulkanContext               *context,
+                                                                         VkPipelineLayout                layout,
                                                                          const char                     *shader_name,
                                                                          VkRenderPass                    render_pass);
 
index f5261261abae1239d7e8f68fae6fee611017ebbb..fb272176d4f2ee3ebb12955cb12f7749a3b005e6 100644 (file)
@@ -111,11 +111,12 @@ gsk_vulkan_box_shadow_pipeline_init (GskVulkanBoxShadowPipeline *self)
 }
 
 GskVulkanPipeline *
-gsk_vulkan_box_shadow_pipeline_new (GskVulkanPipelineLayout *layout,
-                               const char              *shader_name,
-                               VkRenderPass             render_pass)
+gsk_vulkan_box_shadow_pipeline_new (GdkVulkanContext        *context,
+                                    VkPipelineLayout         layout,
+                                    const char              *shader_name,
+                                    VkRenderPass             render_pass)
 {
-  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_BOX_SHADOW_PIPELINE, layout, shader_name, render_pass);
+  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_BOX_SHADOW_PIPELINE, context, layout, shader_name, render_pass);
 }
 
 gsize
index 930480de153782b4535b14cf1937fec2db3bacf2..975338bcf1a0a37dd8e2e5a5703a564b8edf29fc 100644 (file)
@@ -14,7 +14,8 @@ typedef struct _GskVulkanBoxShadowPipelineLayout GskVulkanBoxShadowPipelineLayou
 
 G_DECLARE_FINAL_TYPE (GskVulkanBoxShadowPipeline, gsk_vulkan_box_shadow_pipeline, GSK, VULKAN_BOX_SHADOW_PIPELINE, GskVulkanPipeline)
 
-GskVulkanPipeline *     gsk_vulkan_box_shadow_pipeline_new              (GskVulkanPipelineLayout *       layout,
+GskVulkanPipeline *     gsk_vulkan_box_shadow_pipeline_new              (GdkVulkanContext               *context,
+                                                                         VkPipelineLayout                layout,
                                                                          const char                     *shader_name,
                                                                          VkRenderPass                    render_pass);
 
index 29e44ce7ba28f1ae6925b21395e2a28d9a214356..cd6867a1a4f6e41d2b4e59ce1101881e36406a75 100644 (file)
@@ -76,11 +76,12 @@ gsk_vulkan_color_pipeline_init (GskVulkanColorPipeline *self)
 }
 
 GskVulkanPipeline *
-gsk_vulkan_color_pipeline_new (GskVulkanPipelineLayout *layout,
+gsk_vulkan_color_pipeline_new (GdkVulkanContext         *context,
+                               VkPipelineLayout         layout,
                                const char              *shader_name,
                                VkRenderPass             render_pass)
 {
-  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_COLOR_PIPELINE, layout, shader_name, render_pass);
+  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_COLOR_PIPELINE, context, layout, shader_name, render_pass);
 }
 
 gsize
index 07e63827c899ff0fabbadcdabb714ab511e1417c..b9ae514d2989a0641183b99f4c7342fc7e848992 100644 (file)
@@ -13,7 +13,8 @@ typedef struct _GskVulkanColorPipelineLayout GskVulkanColorPipelineLayout;
 
 G_DECLARE_FINAL_TYPE (GskVulkanColorPipeline, gsk_vulkan_color_pipeline, GSK, VULKAN_COLOR_PIPELINE, GskVulkanPipeline)
 
-GskVulkanPipeline *     gsk_vulkan_color_pipeline_new                   (GskVulkanPipelineLayout *       layout,
+GskVulkanPipeline *     gsk_vulkan_color_pipeline_new                   (GdkVulkanContext               *context,
+                                                                         VkPipelineLayout                layout,
                                                                          const char                     *shader_name,
                                                                          VkRenderPass                    render_pass);
 
index 42b4e8c6399a057115c8d76e78df94a7965077b4..a35e7342c72335a0596eed3c10a88c1609685be7 100644 (file)
@@ -76,11 +76,12 @@ gsk_vulkan_color_text_pipeline_init (GskVulkanColorTextPipeline *self)
 }
 
 GskVulkanPipeline *
-gsk_vulkan_color_text_pipeline_new (GskVulkanPipelineLayout *layout,
+gsk_vulkan_color_text_pipeline_new (GdkVulkanContext        *context,
+                                    VkPipelineLayout         layout,
                                     const char              *shader_name,
                                     VkRenderPass             render_pass)
 {
-  return gsk_vulkan_pipeline_new_full (GSK_TYPE_VULKAN_COLOR_TEXT_PIPELINE, layout, shader_name, render_pass,
+  return gsk_vulkan_pipeline_new_full (GSK_TYPE_VULKAN_COLOR_TEXT_PIPELINE, context, layout, shader_name, render_pass,
                                        VK_BLEND_FACTOR_SRC_ALPHA, VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA);
 }
 
index 8c4a8c35c428b0a7a8f752d2af09c17d57d9494b..bf116c31f9a0fed768acdec5eb920438c268c7d0 100644 (file)
@@ -14,7 +14,8 @@ typedef struct _GskVulkanColorTextPipelineLayout GskVulkanColorTextPipelineLayou
 
 G_DECLARE_FINAL_TYPE (GskVulkanColorTextPipeline, gsk_vulkan_color_text_pipeline, GSK, VULKAN_COLOR_TEXT_PIPELINE, GskVulkanPipeline)
 
-GskVulkanPipeline *     gsk_vulkan_color_text_pipeline_new                   (GskVulkanPipelineLayout        *layout,
+GskVulkanPipeline *     gsk_vulkan_color_text_pipeline_new                   (GdkVulkanContext               *context,
+                                                                              VkPipelineLayout                layout,
                                                                               const char                     *shader_name,
                                                                               VkRenderPass                    render_pass);
 
index 8572da56dca26c712537751968d024ce0a3ef22a..1db9ec6350e50c31fe249937bfab1213cb4c780e 100644 (file)
@@ -108,11 +108,12 @@ gsk_vulkan_effect_pipeline_init (GskVulkanEffectPipeline *self)
 }
 
 GskVulkanPipeline *
-gsk_vulkan_effect_pipeline_new (GskVulkanPipelineLayout *layout,
+gsk_vulkan_effect_pipeline_new (GdkVulkanContext        *context,
+                                VkPipelineLayout         layout,
                                 const char              *shader_name,
                                 VkRenderPass             render_pass)
 {
-  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_EFFECT_PIPELINE, layout, shader_name, render_pass);
+  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_EFFECT_PIPELINE, context, layout, shader_name, render_pass);
 }
 
 gsize
index d2bff8105c33228b4bc8dfdd070302ba67e9cf93..8e3b976bdbfc15b1474fe25918bec92171a1e5c6 100644 (file)
@@ -13,7 +13,8 @@ typedef struct _GskVulkanEffectPipelineLayout GskVulkanEffectPipelineLayout;
 
 G_DECLARE_FINAL_TYPE (GskVulkanEffectPipeline, gsk_vulkan_effect_pipeline, GSK, VULKAN_EFFECT_PIPELINE, GskVulkanPipeline)
 
-GskVulkanPipeline *     gsk_vulkan_effect_pipeline_new                  (GskVulkanPipelineLayout        *layout,
+GskVulkanPipeline *     gsk_vulkan_effect_pipeline_new                  (GdkVulkanContext               *context,
+                                                                         VkPipelineLayout                layout,
                                                                          const char                     *shader_name,
                                                                          VkRenderPass                    render_pass);
 
index cc699495fa0b685ab0bfb13edb2d5c3f5a156614..058a2f8416884767376f27944a92e1932a6d8980 100644 (file)
@@ -159,11 +159,12 @@ gsk_vulkan_linear_gradient_pipeline_init (GskVulkanLinearGradientPipeline *self)
 }
 
 GskVulkanPipeline *
-gsk_vulkan_linear_gradient_pipeline_new (GskVulkanPipelineLayout *layout,
+gsk_vulkan_linear_gradient_pipeline_new (GdkVulkanContext        *context,
+                                         VkPipelineLayout         layout,
                                          const char              *shader_name,
                                          VkRenderPass             render_pass)
 {
-  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_LINEAR_GRADIENT_PIPELINE, layout, shader_name, render_pass);
+  return gsk_vulkan_pipeline_new (GSK_TYPE_VULKAN_LINEAR_GRADIENT_PIPELINE, context, layout, shader_name, render_pass);
 }
 
 gsize
index 50b986e3d56643172270d0fa83cc75af06a2495a..71b6559dc2e60858d587050fe0ba28fabe4dee21 100644 (file)
@@ -16,7 +16,8 @@ typedef struct _GskVulkanLinearGradientPipelineLayout GskVulkanLinearGradientPip
 
 G_DECLARE_FINAL_TYPE (GskVulkanLinearGradientPipeline, gsk_vulkan_linear_gradient_pipeline, GSK, VULKAN_LINEAR_GRADIENT_PIPELINE, GskVulkanPipeline)
 
-GskVulkanPipeline *     gsk_vulkan_linear_gradient_pipeline_new         (GskVulkanPipelineLayout *       layout,
+GskVulkanPipeline *     gsk_vulkan_linear_gradient_pipeline_new         (GdkVulkanContext               *context,
+                                                                         VkPipelineLayout                layout,
                                                                          const char                     *shader_name,
                                                                          VkRenderPass                    render_pass);
 
index 6a834c5d9ebc40440d8d94227c9b553949606c14..38d5a5795fdd7100370c427c27b86b9c3a59ed72 100644 (file)
@@ -9,21 +9,14 @@
 
 typedef struct _GskVulkanPipelinePrivate GskVulkanPipelinePrivate;
 
-struct _GskVulkanPipelineLayout
-{
-  volatile gint ref_count;
-  GdkVulkanContext *vulkan;
-
-  VkPipelineLayout pipeline_layout;
-};
-
 struct _GskVulkanPipelinePrivate
 {
   GObject parent_instance;
 
-  GskVulkanPipelineLayout *layout;
+  GdkVulkanContext *context;
 
   VkPipeline pipeline;
+  VkPipelineLayout layout;
 
   GskVulkanShader *vertex_shader;
   GskVulkanShader *fragment_shader;
@@ -35,18 +28,17 @@ static void
 gsk_vulkan_pipeline_finalize (GObject *gobject)
 {
   GskVulkanPipelinePrivate *priv = gsk_vulkan_pipeline_get_instance_private (GSK_VULKAN_PIPELINE (gobject));
+  VkDevice device;
 
-  VkDevice device = gdk_vulkan_context_get_device (priv->layout->vulkan);
+  device = gdk_vulkan_context_get_device (priv->context);
 
   vkDestroyPipeline (device,
                      priv->pipeline,
                      NULL);
-  
+
   g_clear_pointer (&priv->fragment_shader, gsk_vulkan_shader_free);
   g_clear_pointer (&priv->vertex_shader, gsk_vulkan_shader_free);
 
-  g_clear_pointer (&priv->layout, gsk_vulkan_pipeline_layout_unref);
-
   G_OBJECT_CLASS (gsk_vulkan_pipeline_parent_class)->finalize (gobject);
 }
 
@@ -63,18 +55,20 @@ gsk_vulkan_pipeline_init (GskVulkanPipeline *self)
 
 GskVulkanPipeline *
 gsk_vulkan_pipeline_new (GType                    pipeline_type,
-                         GskVulkanPipelineLayout *layout,
+                         GdkVulkanContext        *context,
+                         VkPipelineLayout         layout,
                          const char              *shader_name,
                          VkRenderPass             render_pass)
 {
-  return gsk_vulkan_pipeline_new_full (pipeline_type, layout, shader_name, render_pass,
+  return gsk_vulkan_pipeline_new_full (pipeline_type, context, layout, shader_name, render_pass,
                                        VK_BLEND_FACTOR_ONE,
                                        VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA);
 }
 
 GskVulkanPipeline *
 gsk_vulkan_pipeline_new_full (GType                    pipeline_type,
-                              GskVulkanPipelineLayout *layout,
+                              GdkVulkanContext        *context,
+                              VkPipelineLayout         layout,
                               const char              *shader_name,
                               VkRenderPass             render_pass,
                               VkBlendFactor            srcBlendFactor,
@@ -82,11 +76,10 @@ gsk_vulkan_pipeline_new_full (GType                    pipeline_type,
 {
   GskVulkanPipelinePrivate *priv;
   GskVulkanPipeline *self;
-  
   VkDevice device;
 
   g_return_val_if_fail (g_type_is_a (pipeline_type, GSK_TYPE_VULKAN_PIPELINE), NULL);
-  g_return_val_if_fail (layout != NULL, NULL);
+  g_return_val_if_fail (layout != VK_NULL_HANDLE, NULL);
   g_return_val_if_fail (shader_name != NULL, NULL);
   g_return_val_if_fail (render_pass != VK_NULL_HANDLE, NULL);
 
@@ -94,12 +87,13 @@ gsk_vulkan_pipeline_new_full (GType                    pipeline_type,
 
   priv = gsk_vulkan_pipeline_get_instance_private (self);
 
-  priv->layout = gsk_vulkan_pipeline_layout_ref (layout);
+  device = gdk_vulkan_context_get_device (context);
 
-  device = gdk_vulkan_context_get_device (layout->vulkan);
+  priv->context = context;
+  priv->layout = layout;
 
-  priv->vertex_shader = gsk_vulkan_shader_new_from_resource (layout->vulkan, GSK_VULKAN_SHADER_VERTEX, shader_name, NULL);
-  priv->fragment_shader = gsk_vulkan_shader_new_from_resource (layout->vulkan, GSK_VULKAN_SHADER_FRAGMENT, shader_name, NULL);
+  priv->vertex_shader = gsk_vulkan_shader_new_from_resource (context, GSK_VULKAN_SHADER_VERTEX, shader_name, NULL);
+  priv->fragment_shader = gsk_vulkan_shader_new_from_resource (context, GSK_VULKAN_SHADER_FRAGMENT, shader_name, NULL);
 
   GSK_VK_CHECK (vkCreateGraphicsPipelines, device,
                                            VK_NULL_HANDLE,
@@ -166,7 +160,7 @@ gsk_vulkan_pipeline_new_full (GType                    pipeline_type,
                                                        VK_DYNAMIC_STATE_SCISSOR
                                                    },
                                                },
-                                               .layout = gsk_vulkan_pipeline_layout_get_pipeline_layout (priv->layout),
+                                               .layout = priv->layout,
                                                .renderPass = render_pass,
                                                .subpass = 0,
                                                .basePipelineHandle = VK_NULL_HANDLE,
@@ -191,69 +185,5 @@ gsk_vulkan_pipeline_get_pipeline_layout (GskVulkanPipeline *self)
 {
   GskVulkanPipelinePrivate *priv = gsk_vulkan_pipeline_get_instance_private (self);
 
-  return priv->layout->pipeline_layout;
-}
-
-/*** GskVulkanPipelineLayout ***/
-
-GskVulkanPipelineLayout *
-gsk_vulkan_pipeline_layout_new (GdkVulkanContext      *context,
-                                guint                  layout_count,
-                                VkDescriptorSetLayout *descriptor_set_layout)
-{
-  GskVulkanPipelineLayout *self;
-  VkDevice device;
-
-  self = g_slice_new0 (GskVulkanPipelineLayout);
-  self->ref_count = 1;
-  self->vulkan = g_object_ref (context);
-
-  device = gdk_vulkan_context_get_device (context);
-
-  GSK_VK_CHECK (vkCreatePipelineLayout, device,
-                                        &(VkPipelineLayoutCreateInfo) {
-                                            .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
-                                            .setLayoutCount = layout_count,
-                                            .pSetLayouts = descriptor_set_layout,
-                                            .pushConstantRangeCount = gst_vulkan_push_constants_get_range_count (),
-                                            .pPushConstantRanges = gst_vulkan_push_constants_get_ranges ()
-                                        },
-                                        NULL,
-                                        &self->pipeline_layout);
-
-  return self;
-}
-
-GskVulkanPipelineLayout *
-gsk_vulkan_pipeline_layout_ref (GskVulkanPipelineLayout *self)
-{
-  self->ref_count++;
-
-  return self;
-}
-
-void
-gsk_vulkan_pipeline_layout_unref (GskVulkanPipelineLayout *self)
-{
-  VkDevice device;
-
-  self->ref_count--;
-
-  if (self->ref_count > 0)
-    return;
-
-  device = gdk_vulkan_context_get_device (self->vulkan);
-
-  vkDestroyPipelineLayout (device,
-                           self->pipeline_layout,
-                           NULL);
-
-  g_slice_free (GskVulkanPipelineLayout, self);
-}
-
-
-VkPipelineLayout
-gsk_vulkan_pipeline_layout_get_pipeline_layout (GskVulkanPipelineLayout *self)
-{
-  return self->pipeline_layout;
+  return priv->layout;
 }
index 648f04ddf1c0a21b492f884cce0a6725349a0695..33660e1ecc9715e57ef2d4f731e544b317a586de 100644 (file)
@@ -7,8 +7,6 @@
 
 G_BEGIN_DECLS
 
-typedef struct _GskVulkanPipelineLayout GskVulkanPipelineLayout;
-
 #define GSK_TYPE_VULKAN_PIPELINE (gsk_vulkan_pipeline_get_type ())
 
 G_DECLARE_DERIVABLE_TYPE (GskVulkanPipeline, gsk_vulkan_pipeline, GSK, VULKAN_PIPELINE, GObject)
@@ -34,21 +32,15 @@ gsk_vulkan_handle_result (VkResult    res,
 
 #define GSK_VK_CHECK(func, ...) gsk_vulkan_handle_result (func (__VA_ARGS__), G_STRINGIFY (func))
 
-GskVulkanPipelineLayout *       gsk_vulkan_pipeline_layout_new          (GdkVulkanContext               *context,
-                                                                         guint                           layout_count,
-                                                                         VkDescriptorSetLayout          *descriptor_set_layout);
-GskVulkanPipelineLayout *       gsk_vulkan_pipeline_layout_ref          (GskVulkanPipelineLayout        *self);
-void                            gsk_vulkan_pipeline_layout_unref        (GskVulkanPipelineLayout        *self);
-
-VkPipelineLayout                gsk_vulkan_pipeline_layout_get_pipeline_layout
-                                                                        (GskVulkanPipelineLayout        *self);
 
 GskVulkanPipeline *     gsk_vulkan_pipeline_new                         (GType                           pipeline_type,
-                                                                         GskVulkanPipelineLayout        *layout,
+                                                                         GdkVulkanContext               *context,
+                                                                         VkPipelineLayout                layout,
                                                                          const char                     *shader_name,
                                                                          VkRenderPass                    render_pass);
 GskVulkanPipeline *     gsk_vulkan_pipeline_new_full                    (GType                           pipeline_type,
-                                                                         GskVulkanPipelineLayout        *layout,
+                                                                         GdkVulkanContext               *context,
+                                                                         VkPipelineLayout                layout,
                                                                          const char                     *shader_name,
                                                                          VkRenderPass                    render_pass,
                                                                          VkBlendFactor                   srcBlendFactor,
index 5a811cf14281c4c743a40e65589de95c834c17a2..e21bef67f25007234a79e00bd725bd610824038a 100644 (file)
@@ -19,6 +19,7 @@
 #include "gskvulkaneffectpipelineprivate.h"
 #include "gskvulkanlineargradientpipelineprivate.h"
 #include "gskvulkantextpipelineprivate.h"
+#include "gskvulkanpushconstantsprivate.h"
 
 #define ORTHO_NEAR_PLANE        -10000
 #define ORTHO_FAR_PLANE          10000
@@ -41,7 +42,7 @@ struct _GskVulkanRender
   VkFence fence;
   VkRenderPass render_pass;
   VkDescriptorSetLayout descriptor_set_layout;
-  GskVulkanPipelineLayout *layout[3]; /* indexed by number of textures */
+  VkPipelineLayout pipeline_layout[3]; /* indexed by number of textures */
   GskVulkanUploader *uploader;
   GskVulkanBuffer *vertex_buffer;
 
@@ -201,7 +202,17 @@ gsk_vulkan_render_new (GskRenderer      *renderer,
         self->descriptor_set_layout,
         self->descriptor_set_layout
       };
-      self->layout[i] = gsk_vulkan_pipeline_layout_new (self->vulkan, i, layouts);
+
+      GSK_VK_CHECK (vkCreatePipelineLayout, device,
+                                            &(VkPipelineLayoutCreateInfo) {
+                                                .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
+                                                .setLayoutCount = i,
+                                                .pSetLayouts = layouts,
+                                                .pushConstantRangeCount = gst_vulkan_push_constants_get_range_count (),
+                                                .pPushConstantRanges = gst_vulkan_push_constants_get_ranges ()
+                                            },
+                                            NULL,
+                                            &self->pipeline_layout[i]);
     }
 
   self->uploader = gsk_vulkan_uploader_new (self->vulkan, self->command_pool);
@@ -345,7 +356,7 @@ gsk_vulkan_render_get_pipeline (GskVulkanRender       *self,
   static const struct {
     const char *name;
     guint num_textures;
-    GskVulkanPipeline * (* create_func) (GskVulkanPipelineLayout *layout, const char *name, VkRenderPass render_pass);
+    GskVulkanPipeline * (* create_func) (GdkVulkanContext *context, VkPipelineLayout layout, const char *name, VkRenderPass render_pass);
   } pipeline_info[GSK_VULKAN_N_PIPELINES] = {
     { "blend",                      1, gsk_vulkan_blend_pipeline_new },
     { "blend-clip",                 1, gsk_vulkan_blend_pipeline_new },
@@ -382,11 +393,10 @@ gsk_vulkan_render_get_pipeline (GskVulkanRender       *self,
   g_return_val_if_fail (type < GSK_VULKAN_N_PIPELINES, NULL);
 
   if (self->pipelines[type] == NULL)
-    {
-      self->pipelines[type] = pipeline_info[type].create_func (self->layout[pipeline_info[type].num_textures],
-                                                               pipeline_info[type].name,
-                                                               self->render_pass);
-    }
+    self->pipelines[type] = pipeline_info[type].create_func (self->vulkan,
+                                                             self->pipeline_layout[pipeline_info[type].num_textures],
+                                                             pipeline_info[type].name,
+                                                             self->render_pass);
 
   return self->pipelines[type];
 }
@@ -570,7 +580,7 @@ gsk_vulkan_render_draw (GskVulkanRender   *self,
 
       for (l = self->render_passes; l; l = l->next)
         {
-          gsk_vulkan_render_pass_draw (l->data, self, self->vertex_buffer, 3, self->layout, command_buffer);
+          gsk_vulkan_render_pass_draw (l->data, self, self->vertex_buffer, 3, self->pipeline_layout, command_buffer);
         }
 
       vkCmdEndRenderPass (command_buffer);
@@ -664,7 +674,9 @@ gsk_vulkan_render_free (GskVulkanRender *self)
   g_clear_pointer (&self->uploader, gsk_vulkan_uploader_free);
 
   for (i = 0; i < 3; i++)
-    g_clear_pointer (&self->layout[i], gsk_vulkan_pipeline_layout_unref);
+    vkDestroyPipelineLayout (device,
+                             self->pipeline_layout[i],
+                             NULL);
 
   vkDestroyRenderPass (device,
                        self->render_pass,
index 245c753caec19736c8718032049c7c773d341b89..9fe37643239ed8edd88b38fb0eb0d98752b649c2 100644 (file)
@@ -1035,7 +1035,7 @@ gsk_vulkan_render_pass_draw (GskVulkanRenderPass     *self,
                              GskVulkanRender         *render,
                              GskVulkanBuffer         *vertex_buffer,
                              guint                    layout_count,
-                             GskVulkanPipelineLayout **layout,
+                             VkPipelineLayout        *pipeline_layout,
                              VkCommandBuffer          command_buffer)
 {
   GskVulkanPipeline *current_pipeline = NULL;
@@ -1316,8 +1316,8 @@ gsk_vulkan_render_pass_draw (GskVulkanRenderPass     *self,
         case GSK_VULKAN_OP_PUSH_VERTEX_CONSTANTS:
           for (int i = 0; i < layout_count; i++)
             gsk_vulkan_push_constants_push (&op->constants.constants,
-                                            command_buffer, 
-                                            gsk_vulkan_pipeline_layout_get_pipeline_layout (layout[i]));
+                                            command_buffer,
+                                            pipeline_layout[i]);
           break;
 
         default:
index d38189966c92547f7d1c7ede6ac78c86a9ec94fc..56bc9ad587a3af85d71033b2fc1cbbf35be5c670 100644 (file)
@@ -37,7 +37,7 @@ void                    gsk_vulkan_render_pass_draw                     (GskVulk
                                                                          GskVulkanRender        *render,
                                                                          GskVulkanBuffer        *vertex_buffer,
                                                                          guint                   layout_count,
-                                                                         GskVulkanPipelineLayout **layout,
+                                                                         VkPipelineLayout       *pipeline_layout,
                                                                          VkCommandBuffer         command_buffer);
 
 G_END_DECLS
index e3295c4f72536a1e9ebf003545497ce35a4377c5..2539ad3b8732484862ede89a799e32056adc6f68 100644 (file)
@@ -83,11 +83,12 @@ gsk_vulkan_text_pipeline_init (GskVulkanTextPipeline *self)
 }
 
 GskVulkanPipeline *
-gsk_vulkan_text_pipeline_new (GskVulkanPipelineLayout *layout,
-                               const char              *shader_name,
-                               VkRenderPass             render_pass)
+gsk_vulkan_text_pipeline_new (GdkVulkanContext        *context,
+                              VkPipelineLayout         layout,
+                              const char              *shader_name,
+                              VkRenderPass             render_pass)
 {
-  return gsk_vulkan_pipeline_new_full (GSK_TYPE_VULKAN_TEXT_PIPELINE, layout, shader_name, render_pass,
+  return gsk_vulkan_pipeline_new_full (GSK_TYPE_VULKAN_TEXT_PIPELINE, context, layout, shader_name, render_pass,
                                        VK_BLEND_FACTOR_SRC_ALPHA, VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA);
 }
 
index 09a58c046890677553ca82a4d626cc4298d4e974..7701fbb4bb4688e8f9ea96007c23e92cfae64223 100644 (file)
@@ -14,9 +14,10 @@ typedef struct _GskVulkanTextPipelineLayout GskVulkanTextPipelineLayout;
 
 G_DECLARE_FINAL_TYPE (GskVulkanTextPipeline, gsk_vulkan_text_pipeline, GSK, VULKAN_TEXT_PIPELINE, GskVulkanPipeline)
 
-GskVulkanPipeline *     gsk_vulkan_text_pipeline_new                   (GskVulkanPipelineLayout *       layout,
-                                                                        const char                     *shader_name,
-                                                                        VkRenderPass                    render_pass);
+GskVulkanPipeline *     gsk_vulkan_text_pipeline_new                   (GdkVulkanContext              *context,
+                                                                        VkPipelineLayout               layout,
+                                                                        const char                    *shader_name,
+                                                                        VkRenderPass                   render_pass);
 
 gsize                   gsk_vulkan_text_pipeline_count_vertex_data     (GskVulkanTextPipeline         *pipeline,
                                                                         int                            num_instances);